//                            _ooOoo_  
//                           o8888888o  
//                           88" . "88  
//                           (| -_- |)  
//                            O\ = /O  
//                        ____/`---'\____  
//                      .   ' \\| |// `.  
//                       / \\||| : |||// \  
//                     / _||||| -:- |||||- \  
//                       | | \\\ - /// | |  
//                     | \_| ''\---/'' | |  
//                      \ .-\__ `-` ___/-. /  
//                   ___`. .' /--.--\ `. . __  
//                ."" '< `.___\_<|>_/___.' >'"".  
//               | | : `- \`.;`\ _ /`;.`/ - ` : | |  
//                 \ \ `-. \_ __\ /__ _/ .-` / /  
//         ======`-.____`-.___\_____/___.-`____.-'======  
//                            `=---='  
//  
//         .............................................  
//                  佛祖保佑             永无BUG 
//          佛曰:  
//                  写字楼里写字间，写字间里程序员；  
//                  程序人员写程序，又拿程序换酒钱。  
//                  酒醒只在网上坐，酒醉还来网下眠；  
//                  酒醉酒醒日复日，网上网下年复年。  
//                  但愿老死电脑间，不愿鞠躬老板前；  
//                  奔驰宝马贵者趣，公交自行程序员。  
//                  别人笑我忒疯癫，我笑自己命太贱；  
//                  不见满街漂亮妹，哪个归得程序员？  


#include "ResBackpackItemMessage.h"

const int ResBackpackItemMessage::_ID = 105110;

ResBackpackItemMessage::ResBackpackItemMessage(){
	//背包格子上限
	backNum =0;
}
ResBackpackItemMessage::~ResBackpackItemMessage()
{
reset();
}

/**
 * 读取字节缓存
 */
bool ResBackpackItemMessage::read_from(ByteBuf& buf)
{
	//背包格子上限
	backNum = readInt32(buf);
	//背包装备信息
	short equis_length = readInt16(buf);
	for (int i = 0; i < equis_length; i++) {
		auto bean =new EquipInfo();
		readBean(buf, *bean);
		equis.push_back(bean);
	}
	//背包物品信息
	short items_length = readInt16(buf);
	for (int i = 0; i < items_length; i++) {
		auto bean =new ItemInfo();
		readBean(buf, *bean);
		items.push_back(bean);
	}
	//令牌信息
	short tokens_length = readInt16(buf);
	for (int i = 0; i < tokens_length; i++) {
		auto bean =new TokenInfo();
		readBean(buf, *bean);
		tokens.push_back(bean);
	}
	
	return true;
}

/**
 * 写入字节缓存
 */
bool ResBackpackItemMessage::write_to(ByteBuf& buf)
{
	//背包格子上限
	writeInt32(buf, backNum);
	//背包装备信息
	writeShort(buf, equis.size());
	for (int i = 0; i < equis.size(); i++) {
		writeBean(buf, *equis[i]);
	}
	//背包物品信息
	writeShort(buf, items.size());
	for (int i = 0; i < items.size(); i++) {
		writeBean(buf, *items[i]);
	}
	//令牌信息
	writeShort(buf, tokens.size());
	for (int i = 0; i < tokens.size(); i++) {
		writeBean(buf, *tokens[i]);
	}
	
	return true;
}

int ResBackpackItemMessage::getId()
{
  	return _ID;
}



void ResBackpackItemMessage::reset(){
for(auto bean : equis){
	if (bean)
	delete bean;
}
equis.clear();
for(auto bean : items){
	if (bean)
	delete bean;
}
items.clear();
for(auto bean : tokens){
	if (bean)
	delete bean;
}
tokens.clear();
}


ResBackpackItemMessage* ResBackpackItemMessage::clone(){
	auto ret=new ResBackpackItemMessage();
    ret->backNum=backNum;
for(auto bean : equis){
    ret->equis.push_back(bean->clone());
}
for(auto bean : items){
    ret->items.push_back(bean->clone());
}
for(auto bean : tokens){
    ret->tokens.push_back(bean->clone());
}
	return ret;
}